home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 526-550 / disk_534 / term / source.lzh / PhonePanel.c < prev    next >
C/C++ Source or Header  |  1991-07-07  |  38KB  |  1,331 lines

  1. /* $Revision Header * Header built automatically - do not edit! *************
  2.  *
  3.  *    (C) Copyright 1990 by Olaf 'Olsen' Barthel & MXM
  4.  *
  5.  *    Name .....: PhonePanel.c
  6.  *    Created ..: Monday 21-Jan-91 20:12
  7.  *    Revision .: 0
  8.  *
  9.  *    Date            Author          Comment
  10.  *    =========       ========        ====================
  11.  *    21-Jan-91       Olsen           Created this file!
  12.  *
  13.  * $Revision Header ********************************************************/
  14.  
  15. #include "TermGlobal.h"
  16.  
  17. enum    {    GAD_NAME,GAD_NAMELIST,GAD_PHONENUMBER,GAD_PASSWORD,GAD_MACROFILE,
  18.         GAD_PAYUNIT1,GAD_MINUNIT1,GAD_STARTTIME1,GAD_PAYUNIT2,GAD_MINUNIT2,
  19.         GAD_STARTTIME2,GAD_SERIAL,GAD_MODEM,GAD_SCREEN,GAD_TERMINAL,
  20.         GAD_STARTUP,GAD_PATH,GAD_TRANSFER,GAD_UNUSED0,GAD_PLAY,
  21.         GAD_UNUSED2,GAD_UNUSED3,GAD_UNUSED4,GAD_DIAL,GAD_GET,GAD_NEW,
  22.         GAD_REMOVE,GAD_LOAD,GAD_SORT,GAD_SAVE };
  23.  
  24. enum    {    MEN_NEXT=1,MEN_PREV,MEN_LIST,MEN_WINDOW,MEN_SETSERIAL,MEN_SETMODEM,
  25.         MEN_SETSCREEN,MEN_SETTERMINAL,MEN_SETSTARTUP,
  26.         MEN_SETPATH,MEN_SETTRANSFER,MEN_PLAYNUMBER,MEN_DIALENTRY,MEN_GET,
  27.         MEN_NEWENTRY,MEN_REMENTRY,MEN_LOAD,MEN_SORT,MEN_SAVEPHONE,
  28.         MEN_QUITPANEL };
  29.  
  30. STATIC struct NewMenu PhoneMenu[] =
  31. {
  32.     { NM_TITLE, "Project",         0 , 0, 0, (APTR)0},
  33.     {  NM_ITEM, "Next Entry",    "N", 0, 0, (APTR)MEN_NEXT},
  34.     {  NM_ITEM, "Previous Entry",    "P", 0, 0, (APTR)MEN_PREV},
  35.     {  NM_ITEM, "Insert Entry",    "I", 0, 0, (APTR)MEN_LIST},
  36.     {  NM_ITEM, "Other Window",    "W", 0, 0, (APTR)MEN_WINDOW},
  37.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  38.     {  NM_ITEM, "Load",        "L", 0, 0, (APTR)MEN_LOAD},
  39.     {  NM_ITEM, "Sort",        "O", 0, 0, (APTR)MEN_SORT},
  40.     {  NM_ITEM, "Save",        "S", 0, 0, (APTR)MEN_SAVEPHONE},
  41.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  42.     {  NM_ITEM, "Quit",        "Q", 0, 0, (APTR)MEN_QUITPANEL},
  43.  
  44.     { NM_TITLE, "Preferences",     0 , 0, 0, (APTR)0},
  45.     {  NM_ITEM, "Serial...",    "1", 0, 0, (APTR)MEN_SETSERIAL},
  46.     {  NM_ITEM, "Modem...",        "2", 0, 0, (APTR)MEN_SETMODEM},
  47.     {  NM_ITEM, "Screen...",    "3", 0, 0, (APTR)MEN_SETSCREEN},
  48.     {  NM_ITEM, "Terminal...",    "4", 0, 0, (APTR)MEN_SETTERMINAL},
  49.     {  NM_ITEM, "Startup...",    "5", 0, 0, (APTR)MEN_SETSTARTUP},
  50.     {  NM_ITEM, "Paths...",        "6", 0, 0, (APTR)MEN_SETPATH},
  51.     {  NM_ITEM, "Transfer...",    "7", 0, 0, (APTR)MEN_SETTRANSFER},
  52.  
  53.     { NM_TITLE, "Goodies",         0 , 0, 0, (APTR)0},
  54.     {  NM_ITEM, "Play Number",    "!", 0, 0, (APTR)MEN_PLAYNUMBER},
  55.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  56.     {  NM_ITEM, "Dial Entry",    "D", 0, 0, (APTR)MEN_DIALENTRY},
  57.     {  NM_ITEM, "Get Settings",    "G", 0, 0, (APTR)MEN_GET},
  58.     {  NM_ITEM, "New Entry",    "E", 0, 0, (APTR)MEN_NEWENTRY},
  59.     {  NM_ITEM, "Remove Entry",    "R", 0, 0, (APTR)MEN_REMENTRY},
  60.     { NM_END, 0,             0 , 0, 0, (APTR)0}
  61. };
  62.  
  63. #define WIDTH    640
  64. #define HEIGHT    170
  65.  
  66. STATIC UBYTE * __saveds
  67. ShowFraction(struct Gadget *SomeGadget,WORD Level)
  68. {
  69.     STATIC UBYTE Buffer[6];
  70.  
  71.     SPrintf(Buffer,"%ld.%02ld",Level / 100,Level % 100);
  72.  
  73.     return(Buffer);
  74. }
  75.  
  76. STATIC UBYTE * __saveds
  77. ShowTime(struct Gadget *SomeGadget,WORD Level)
  78. {
  79.     STATIC UBYTE Buffer[6];
  80.  
  81.     SPrintf(Buffer,"%2ld.%02ld",Level / 60,Level % 60);
  82.  
  83.     return(Buffer);
  84. }
  85.  
  86. STATIC UBYTE * __saveds
  87. ShowHour(struct Gadget *SomeGadget,WORD Level)
  88. {
  89.     STATIC UBYTE Buffer[6];
  90.  
  91.     SPrintf(Buffer,"%2ld:%02ld",Level / 6,(Level % 6) * 10);
  92.  
  93.     return(Buffer);
  94. }
  95.  
  96. STATIC struct Gadget *
  97. CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  98. {
  99.     struct Gadget        *Gadget;
  100.     struct NewGadget     NewGadget;
  101.     UWORD             LeftEdge,Counter = 0,NewTopEdge;
  102.  
  103.     if(Gadget = CreateContext(GadgetList))
  104.     {
  105.         NewGadget . ng_Width        = 258;
  106.         NewGadget . ng_Height        = 12;
  107.         NewGadget . ng_GadgetText    = "Name";
  108.         NewGadget . ng_TextAttr        = &DefaultFont;
  109.         NewGadget . ng_VisualInfo    = VisualInfo;
  110.         NewGadget . ng_GadgetID        = Counter;
  111.         NewGadget . ng_Flags        = NG_HIGHLABEL|PLACETEXT_LEFT;
  112.  
  113.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  114.             GTST_MaxChars,    29,
  115.         TAG_DONE);
  116.  
  117.         NewGadget . ng_Height        = 44;
  118.         NewGadget . ng_GadgetText    = "   Name List";
  119.         NewGadget . ng_GadgetID        = Counter;
  120.         NewGadget . ng_LeftEdge        = (strlen(NewGadget . ng_GadgetText) + 2) * 8 + 1;
  121.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  122.  
  123.         GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  124.             GTLV_ShowSelected,    Gadget,
  125.         TAG_DONE);
  126.  
  127.         NewGadget . ng_Height        = 12;
  128.         NewGadget . ng_GadgetText    = "Phone Number";
  129.         NewGadget . ng_GadgetID        = Counter;
  130.         NewGadget . ng_TopEdge        = GadgetArray[0] -> TopEdge + GadgetArray[0] -> Height + 2;
  131.  
  132.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  133.             GTST_MaxChars,    40,
  134.         TAG_DONE);
  135.  
  136.         NewGadget . ng_GadgetText    = "Password";
  137.         NewGadget . ng_GadgetID        = Counter;
  138.         NewGadget . ng_Flags        = NG_HIGHLABEL|PLACETEXT_LEFT;
  139.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 3;
  140.  
  141.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  142.             GTST_MaxChars,    40,
  143.         TAG_DONE);
  144.  
  145.         NewGadget . ng_GadgetText    = "Macro File";
  146.         NewGadget . ng_GadgetID        = Counter;
  147.         NewGadget . ng_Flags        = NG_HIGHLABEL|PLACETEXT_LEFT;
  148.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 3;
  149.  
  150.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  151.             GTST_MaxChars,    40,
  152.         TAG_DONE);
  153.  
  154.         LeftEdge    = NewGadget . ng_LeftEdge;
  155.         NewTopEdge    = Gadget -> TopEdge + Gadget -> Height + 4;
  156.  
  157.         NewGadget . ng_GadgetText    = "Pay/Unit     (1)      ";
  158.         NewGadget . ng_Width        = 74;
  159.         NewGadget . ng_GadgetID        = Counter;
  160.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  161.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 192;
  162.  
  163.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  164.             GTSL_Min,        0,
  165.             GTSL_Max,        500,
  166.             GTSL_DispFunc,        ShowFraction,
  167.             GTSL_LevelFormat,    "%s",
  168.             GTSL_MaxLevelLen,    4,
  169.         TAG_DONE);
  170.  
  171.         NewGadget . ng_GadgetText    = "Minutes/Unit (1)      ";
  172.         NewGadget . ng_GadgetID        = Counter;
  173.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 3;
  174.  
  175.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  176.             GTSL_Min,        0,
  177.             GTSL_Max,        1800,
  178.             GTSL_DispFunc,        ShowTime,
  179.             GTSL_LevelFormat,    "%s",
  180.             GTSL_MaxLevelLen,    5,
  181.         TAG_DONE);
  182.  
  183.         NewGadget . ng_GadgetText    = "Start Time   (1)      ";
  184.         NewGadget . ng_GadgetID        = Counter;
  185.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 3;
  186.  
  187.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  188.             GTSL_Min,        0,
  189.             GTSL_Max,        143,
  190.             GTSL_DispFunc,        ShowHour,
  191.             GTSL_LevelFormat,    "%s",
  192.             GTSL_MaxLevelLen,    5,
  193.         TAG_DONE);
  194.  
  195.         NewGadget . ng_GadgetText    = "Pay/Unit     (2)      ";
  196.         NewGadget . ng_GadgetID        = Counter;
  197.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 13;
  198.  
  199.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  200.             GTSL_Min,        0,
  201.             GTSL_Max,        500,
  202.             GTSL_DispFunc,        ShowFraction,
  203.             GTSL_LevelFormat,    "%s",
  204.             GTSL_MaxLevelLen,    4,
  205.         TAG_DONE);
  206.  
  207.         NewGadget . ng_GadgetText    = "Minutes/Unit (2)      ";
  208.         NewGadget . ng_GadgetID        = Counter;
  209.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 3;
  210.  
  211.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  212.             GTSL_Min,        0,
  213.             GTSL_Max,        1800,
  214.             GTSL_DispFunc,        ShowTime,
  215.             GTSL_LevelFormat,    "%s",
  216.             GTSL_MaxLevelLen,    5,
  217.         TAG_DONE);
  218.  
  219.         NewGadget . ng_GadgetText    = "Start Time   (2)      ";
  220.         NewGadget . ng_GadgetID        = Counter;
  221.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 3;
  222.  
  223.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  224.             GTSL_Min,        0,
  225.             GTSL_Max,        143,
  226.             GTSL_DispFunc,        ShowHour,
  227.             GTSL_LevelFormat,    "%s",
  228.             GTSL_MaxLevelLen,    5,
  229.         TAG_DONE);
  230.  
  231.         NewGadget . ng_GadgetText    = "Serial    _1";
  232.         NewGadget . ng_Width        = 128;
  233.         NewGadget . ng_GadgetID        = Counter;
  234.         NewGadget . ng_Flags        = NG_HIGHLABEL;
  235.         NewGadget . ng_LeftEdge        = LeftEdge;
  236.         NewGadget . ng_TopEdge        = NewTopEdge;
  237.  
  238.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  239.             GT_Underscore,    '_',
  240.         TAG_DONE);
  241.  
  242.         NewGadget . ng_GadgetText    = "Modem     _2";
  243.         NewGadget . ng_GadgetID        = Counter;
  244.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  245.  
  246.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  247.             GT_Underscore,    '_',
  248.         TAG_DONE);
  249.  
  250.         NewGadget . ng_GadgetText    = "Screen    _3";
  251.         NewGadget . ng_GadgetID        = Counter;
  252.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  253.  
  254.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  255.             GT_Underscore,    '_',
  256.         TAG_DONE);
  257.  
  258.         NewGadget . ng_GadgetText    = "Terminal  _4";
  259.         NewGadget . ng_GadgetID        = Counter;
  260.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  261.  
  262.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  263.             GT_Underscore,    '_',
  264.         TAG_DONE);
  265.  
  266.         NewGadget . ng_GadgetText    = "Startup   _5";
  267.         NewGadget . ng_GadgetID        = Counter;
  268.         NewGadget . ng_LeftEdge        = LeftEdge;
  269.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  270.  
  271.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  272.             GT_Underscore,    '_',
  273.         TAG_DONE);
  274.  
  275.         NewGadget . ng_GadgetText    = "Paths     _6";
  276.         NewGadget . ng_GadgetID        = Counter;
  277.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  278.  
  279.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  280.             GT_Underscore,    '_',
  281.         TAG_DONE);
  282.  
  283.         NewGadget . ng_GadgetText    = "Transfer  _7";
  284.         NewGadget . ng_GadgetID        = Counter;
  285.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  286.  
  287.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  288.             GT_Underscore,    '_',
  289.         TAG_DONE);
  290.  
  291.         NewGadget . ng_GadgetText    = "-- Unused --";
  292.         NewGadget . ng_GadgetID        = Counter;
  293.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  294.  
  295.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  296.             TAG_DONE);
  297.  
  298.         Gadget -> Flags |= GFLG_DISABLED;
  299.  
  300.         NewGadget . ng_GadgetText    = "Play Number_!";
  301.         NewGadget . ng_GadgetID        = Counter;
  302.         NewGadget . ng_LeftEdge        = LeftEdge;
  303.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  304.  
  305.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  306.             GT_Underscore,    '_',
  307.         TAG_DONE);
  308.  
  309.         NewGadget . ng_GadgetText    = "-- Unused --";
  310.         NewGadget . ng_GadgetID        = Counter;
  311.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  312.  
  313.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  314.             TAG_DONE);
  315.  
  316.         Gadget -> Flags |= GFLG_DISABLED;
  317.  
  318.         NewGadget . ng_GadgetText    = "-- Unused --";
  319.         NewGadget . ng_GadgetID        = Counter;
  320.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  321.  
  322.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  323.             TAG_DONE);
  324.  
  325.         Gadget -> Flags |= GFLG_DISABLED;
  326.  
  327.         NewGadget . ng_GadgetText    = "-- Unused --";
  328.         NewGadget . ng_GadgetID        = Counter;
  329.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  330.  
  331.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  332.             TAG_DONE);
  333.  
  334.         Gadget -> Flags |= GFLG_DISABLED;
  335.  
  336.         NewGadget . ng_GadgetText    = "_Dial";
  337.         NewGadget . ng_GadgetID        = Counter;
  338.         NewGadget . ng_Flags        = 0;
  339.         NewGadget . ng_LeftEdge        = LeftEdge;
  340.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 2;
  341.  
  342.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  343.             GT_Underscore,    '_',
  344.         TAG_DONE);
  345.  
  346.         NewGadget . ng_GadgetText    = "_Get Settings";
  347.         NewGadget . ng_GadgetID        = Counter;
  348.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  349.  
  350.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  351.             GT_Underscore,    '_',
  352.         TAG_DONE);
  353.  
  354.         NewGadget . ng_GadgetText    = "New _Entry";
  355.         NewGadget . ng_GadgetID        = Counter;
  356.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  357.  
  358.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  359.             GT_Underscore,    '_',
  360.         TAG_DONE);
  361.  
  362.         NewGadget . ng_GadgetText    = "_Remove Entry";
  363.         NewGadget . ng_GadgetID        = Counter;
  364.         NewGadget . ng_LeftEdge        = Gadget -> LeftEdge + Gadget -> Width + 2;
  365.  
  366.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  367.             GT_Underscore,    '_',
  368.         TAG_DONE);
  369.  
  370.         NewGadget . ng_Width        = 52;
  371.         NewGadget . ng_Height        = 12;
  372.         NewGadget . ng_GadgetText    = "_Load";
  373.         NewGadget . ng_GadgetID        = Counter;
  374.         NewGadget . ng_Flags        = 0;
  375.         NewGadget . ng_LeftEdge        = 10;
  376.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  377.  
  378.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  379.             GT_Underscore,    '_',
  380.         TAG_DONE);
  381.  
  382.         NewGadget . ng_GadgetText    = "S_ort";
  383.         NewGadget . ng_GadgetID        = Counter;
  384.         NewGadget . ng_LeftEdge        = (WIDTH - NewGadget . ng_Width) >> 1;
  385.  
  386.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  387.             GT_Underscore,    '_',
  388.         TAG_DONE);
  389.  
  390.         NewGadget . ng_GadgetText    = "_Save";
  391.         NewGadget . ng_GadgetID        = Counter;
  392.         NewGadget . ng_LeftEdge        = WIDTH - 9 - NewGadget . ng_Width;
  393.  
  394.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  395.             GT_Underscore,    '_',
  396.         TAG_DONE);
  397.  
  398.         DubGadList(GadgetArray[0]);
  399.     }
  400.  
  401.     return(Gadget);
  402. }
  403.  
  404. struct List *
  405. PhonePanel(LONG *NumCalls)
  406. {
  407.     STATIC WORD     OffsetX = -1,OffsetY = -1;
  408.  
  409.     struct Window    *PanelWindow;
  410.     struct Menu    *PanelMenu;
  411.     struct Gadget    *GadgetList;
  412.     struct Gadget    *GadgetArray[GAD_SAVE + 1];
  413.  
  414.     ULONG         Sec1,Mic1,Sec2,Mic2;
  415.     LONG         HitItem = -1;
  416.  
  417.     if(CreateAllGadgets(&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  418.     {
  419.         if(PanelMenu = CreateMenus(PhoneMenu,
  420.             GTMN_FrontPen, 0,
  421.         TAG_DONE))
  422.         {
  423.             if(LayoutMenus(PanelMenu,VisualInfo,
  424.                 GTMN_TextAttr,&DefaultFont,
  425.             TAG_DONE))
  426.             {
  427.                 if(OffsetX == -1)
  428.                     OffsetX = (Screen -> Width - WIDTH) >> 1;
  429.  
  430.                 if(OffsetY == -1)
  431.                     OffsetY = (Screen -> Height - HEIGHT) >> 1;
  432.  
  433.                 if(PanelWindow = OpenWindowTags(NULL,
  434.                     WA_Left,    OffsetX,
  435.                     WA_Top,        OffsetY,
  436.                     WA_Width,    WIDTH,
  437.                     WA_Height,    HEIGHT,
  438.  
  439.                     WA_Activate,    TRUE,
  440.                     WA_DragBar,    TRUE,
  441.                     WA_DepthGadget,    TRUE,
  442.                     WA_RMBTrap,    TRUE,
  443.                     WA_DepthGadget,    TRUE,
  444.                     WA_CloseGadget,    TRUE,
  445.                     WA_CustomScreen,Screen,
  446.  
  447.                     WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | SLIDERIDCMP | CHECKBOXIDCMP | LISTVIEWIDCMP | IDCMP_MENUPICK | IDCMP_RAWKEY,
  448.  
  449.                     WA_Title,    "Phonebook",
  450.                 TAG_DONE))
  451.                 {
  452.                     struct IntuiMessage    *Massage;
  453.                     ULONG             Class,Code;
  454.                     struct Gadget        *Gadget;
  455.                     BYTE             Terminated = FALSE;
  456.  
  457.                     ULONG             Mask;
  458.  
  459.                     UBYTE             DummyBuffer[256],*DummyChar;
  460.  
  461.                     LONG             Selected = ~0;
  462.                     struct List        *PhoneList = NULL;
  463.  
  464.                     struct FileRequest    *FileRequest;
  465.  
  466.                     PushWindow(PanelWindow);
  467.  
  468.                     AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  469.                     RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  470.                     GT_RefreshWindow(PanelWindow,NULL);
  471.  
  472.                     SetMenuStrip(PanelWindow,PanelMenu);
  473.  
  474.                     PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  475.  
  476.                     if(Phonebook && NumPhoneEntries)
  477.                     {
  478.                         if(PhoneList = CreatePhoneList())
  479.                         {
  480.                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  481.                                 GTLV_Labels,~0,
  482.                             TAG_DONE);
  483.  
  484.                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  485.                                 GTLV_Labels,PhoneList,
  486.                             TAG_DONE);
  487.                         }
  488.                     }
  489.  
  490.                     if(SubList)
  491.                         OpenSubWindow();
  492.  
  493.                     ActivateGadget(GadgetArray[GAD_NAME],PanelWindow,NULL);
  494.  
  495.                     ActiveGadget = GadgetArray[GAD_NAME];
  496.  
  497.                     while(!Terminated)
  498.                     {
  499. OuterLoop:                    Mask = (1 << PanelWindow -> UserPort -> mp_SigBit);
  500.  
  501.                         if(SubWindow)
  502.                             Mask |= (1 << SubWindow -> UserPort -> mp_SigBit);
  503.  
  504.                         Wait(Mask);
  505.  
  506.                         while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  507.                         {
  508.                             Class    = Massage -> Class;
  509.                             Code    = Massage -> Code;
  510.                             Gadget    = (struct Gadget *)Massage -> IAddress;
  511.  
  512.                             GT_ReplyIMsg(Massage);
  513.  
  514.                             if(Class == IDCMP_GADGETDOWN)
  515.                             {
  516.                                 if((Gadget -> GadgetType & GTYP_GTYPEMASK) == STRGADGET)
  517.                                     ActiveGadget = Gadget;
  518.                             }
  519.  
  520.                             if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  521.                                 ActivateGadget(ActiveGadget,PanelWindow,NULL);
  522.  
  523.                             if(Class == IDCMP_RAWKEY)
  524.                             {
  525.                                 if(Code == IECODE_UP_PREFIX|103 && CommandWindow == PanelWindow)
  526.                                     ActivateGadget(CommandGadget,PanelWindow,NULL);
  527.                             }
  528.  
  529.                             if(Class == IDCMP_MENUPICK)
  530.                             {
  531.                                 struct MenuItem *MenuItem;
  532.  
  533.                                 while(Code != MENUNULL)
  534.                                 {
  535.                                     MenuItem = ItemAddress(PanelMenu,Code);
  536.  
  537.                                     switch((ULONG)MENU_USERDATA(MenuItem))
  538.                                     {
  539.                                         case MEN_QUITPANEL:    Class = IDCMP_CLOSEWINDOW;
  540.                                                     break;
  541.  
  542.                                         case MEN_NEXT:        if(NumPhoneEntries)
  543.                                                     {
  544.                                                         if(Selected == ~0)
  545.                                                              Selected = 0;
  546.                                                          else
  547.                                                          {
  548.                                                              if(Selected == NumPhoneEntries - 1)
  549.                                                                  Selected = 0;
  550.                                                              else
  551.                                                                  Selected++;
  552.                                                          }
  553.  
  554.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  555.                                                             GTLV_Selected,Selected,
  556.                                                         TAG_DONE);
  557.  
  558.                                                          Code = Selected;
  559.                                                          HitItem = -1;
  560.  
  561.                                                          goto SelectEntry;
  562.                                                     }
  563.  
  564.                                                     break;
  565.  
  566.                                         case MEN_PREV:        if(NumPhoneEntries)
  567.                                                     {
  568.                                                         if(Selected == ~0)
  569.                                                              Selected = 0;
  570.                                                          else
  571.                                                          {
  572.                                                              if(Selected == 0)
  573.                                                                  Selected = NumPhoneEntries - 1;
  574.                                                              else
  575.                                                                  Selected--;
  576.                                                          }
  577.  
  578.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  579.                                                             GTLV_Selected,Selected,
  580.                                                         TAG_DONE);
  581.  
  582.                                                          Code = Selected;
  583.                                                          HitItem = -1;
  584.  
  585.                                                          goto SelectEntry;
  586.                                                     }
  587.  
  588.                                                     break;
  589.  
  590.                                         case MEN_LIST:        if(Selected != ~0)
  591.                                                     {
  592.                                                         Code = HitItem = Selected;
  593.  
  594.                                                         CurrentTime(&Sec1,&Mic1);
  595.  
  596.                                                         goto SelectEntry;
  597.                                                     }
  598.  
  599.                                                     break;
  600.  
  601.                                         case MEN_WINDOW:    if(SubWindow)
  602.                                                     {
  603.                                                         WindowToFront(SubWindow);
  604.  
  605.                                                         ActivateWindow(SubWindow);
  606.                                                     }
  607.                                                     break;
  608.  
  609.                                         case MEN_SETSERIAL:    Class = IDCMP_GADGETUP;
  610.  
  611.                                                     Gadget = GadgetArray[GAD_SERIAL];
  612.                                                     break;
  613.  
  614.                                         case MEN_SETMODEM:    Class = IDCMP_GADGETUP;
  615.  
  616.                                                     Gadget = GadgetArray[GAD_MODEM];
  617.                                                     break;
  618.  
  619.                                         case MEN_SETSCREEN:    Class = IDCMP_GADGETUP;
  620.  
  621.                                                     Gadget = GadgetArray[GAD_SCREEN];
  622.                                                     break;
  623.  
  624.                                         case MEN_SETTERMINAL:    Class = IDCMP_GADGETUP;
  625.  
  626.                                                     Gadget = GadgetArray[GAD_TERMINAL];
  627.                                                     break;
  628.  
  629.                                         case MEN_SETSTARTUP:    Class = IDCMP_GADGETUP;
  630.  
  631.                                                     Gadget = GadgetArray[GAD_STARTUP];
  632.                                                     break;
  633.  
  634.                                         case MEN_SETPATH:    Class = IDCMP_GADGETUP;
  635.  
  636.                                                     Gadget = GadgetArray[GAD_PATH];
  637.                                                     break;
  638.  
  639.                                         case MEN_SETTRANSFER:    Class = IDCMP_GADGETUP;
  640.  
  641.                                                     Gadget = GadgetArray[GAD_TRANSFER];
  642.                                                     break;
  643.  
  644.                                         case MEN_PLAYNUMBER:    Class = IDCMP_GADGETUP;
  645.  
  646.                                                     Gadget = GadgetArray[GAD_PLAY];
  647.                                                     break;
  648.  
  649.                                         case MEN_DIALENTRY:    Class = IDCMP_GADGETUP;
  650.  
  651.                                                     Gadget = GadgetArray[GAD_DIAL];
  652.                                                     break;
  653.  
  654.                                         case MEN_NEWENTRY:    Class = IDCMP_GADGETUP;
  655.  
  656.                                                     Gadget = GadgetArray[GAD_NEW];
  657.                                                     break;
  658.  
  659.                                         case MEN_GET:    Class = IDCMP_GADGETUP;
  660.  
  661.                                                     Gadget = GadgetArray[GAD_GET];
  662.                                                     break;
  663.  
  664.                                         case MEN_REMENTRY:    Class = IDCMP_GADGETUP;
  665.  
  666.                                                     Gadget = GadgetArray[GAD_REMOVE];
  667.                                                     break;
  668.  
  669.                                         case MEN_LOAD:        Class = IDCMP_GADGETUP;
  670.  
  671.                                                     Gadget = GadgetArray[GAD_LOAD];
  672.                                                     break;
  673.  
  674.                                         case MEN_SORT:        Class = IDCMP_GADGETUP;
  675.  
  676.                                                     Gadget = GadgetArray[GAD_SORT];
  677.                                                     break;
  678.  
  679.                                         case MEN_SAVEPHONE:    Class = IDCMP_GADGETUP;
  680.  
  681.                                                     Gadget = GadgetArray[GAD_SAVE];
  682.                                                     break;
  683.  
  684.                                         default:        break;
  685.                                     }
  686.  
  687.                                     Code = MenuItem -> NextSelect;
  688.                                 }
  689.  
  690.                                 if(ActiveGadget)
  691.                                     ActivateGadget(ActiveGadget,PanelWindow,NULL);
  692.                             }
  693.  
  694.                             if(Class == IDCMP_CLOSEWINDOW)
  695.                             {
  696.                                 CloseSubWindow();
  697.                                 FreeSubList();
  698.  
  699.                                 Terminated = TRUE;
  700.                             }
  701.  
  702.                             if(Class == IDCMP_MOUSEMOVE && Selected != ~0)
  703.                             {
  704.                                 switch(Gadget -> GadgetID)
  705.                                 {
  706.                                     case GAD_PAYUNIT1:    Phonebook[Selected] -> PayPerUnit[0] = Code;
  707.                                                 break;
  708.  
  709.                                     case GAD_MINUNIT1:    Phonebook[Selected] -> SecPerUnit[0] = Code;
  710.                                                 break;
  711.  
  712.                                     case GAD_STARTTIME1:    Phonebook[Selected] -> TimeOfDay[0] = Code;
  713.                                                 break;
  714.  
  715.                                     case GAD_PAYUNIT2:    Phonebook[Selected] -> PayPerUnit[1] = Code;
  716.                                                 break;
  717.  
  718.                                     case GAD_MINUNIT2:    Phonebook[Selected] -> SecPerUnit[1] = Code;
  719.                                                 break;
  720.  
  721.                                     case GAD_STARTTIME2:    Phonebook[Selected] -> TimeOfDay[1] = Code;
  722.                                                 break;
  723.  
  724.                                     default:        break;
  725.                                 }
  726.                             }
  727.  
  728.                             if(Class == IDCMP_GADGETUP)
  729.                             {
  730.                                 switch(Gadget -> GadgetID)
  731.                                 {
  732.                                     case GAD_PLAY:
  733.  
  734.                                         if(Selected != ~0)
  735.                                         {
  736.                                             SetWait(PanelWindow);
  737.                                             PanelWindow -> Flags |= WFLG_RMBTRAP;
  738.  
  739.                                             if(!ToneDial(Phonebook[Selected] -> Number))
  740.                                                 MyEasyRequest(NULL,"term has a problem:\n%s!","Continue","Failed to allocate resources for playing.");
  741.  
  742.                                             ClearPointer(PanelWindow);
  743.                                             PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  744.                                         }
  745.  
  746.                                         break;
  747.  
  748.                                     case GAD_NAMELIST:
  749. SelectEntry:                                        if(HitItem != Code)
  750.                                             {
  751.                                                 HitItem = Code;
  752.  
  753.                                                 CurrentTime(&Sec1,&Mic1);
  754.                                             }
  755.                                             else
  756.                                             {
  757.                                                 CurrentTime(&Sec2,&Mic2);
  758.  
  759.                                                 if(DoubleClick(Sec1,Mic1,Sec2,Mic2))
  760.                                                 {
  761.                                                     HitItem = -1;
  762.  
  763.                                                     if(!SubWindow)
  764.                                                         OpenSubWindow();
  765.  
  766.                                                     AddSubEntry(Code);
  767.                                                 }
  768.  
  769.                                                 Sec1 = Sec2;
  770.                                                 Mic1 = Mic2;
  771.                                             }
  772.  
  773.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  774.                                                 GTST_String,Phonebook[Code] -> Number,
  775.                                             TAG_DONE);
  776.  
  777.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  778.                                                 GTST_String,Phonebook[Code] -> Password,
  779.                                             TAG_DONE);
  780.  
  781.                                             GT_SetGadgetAttrs(GadgetArray[GAD_MACROFILE],PanelWindow,NULL,
  782.                                                 GTST_String,Phonebook[Code] -> Config . MacroFile,
  783.                                             TAG_DONE);
  784.  
  785.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT1],PanelWindow,NULL,
  786.                                                 GTSL_Level,Phonebook[Code] -> PayPerUnit[0],
  787.                                             TAG_DONE);
  788.  
  789.                                             GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT1],PanelWindow,NULL,
  790.                                                 GTSL_Level,Phonebook[Code] -> SecPerUnit[0],
  791.                                             TAG_DONE);
  792.  
  793.                                             GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME1],PanelWindow,NULL,
  794.                                                 GTSL_Level,Phonebook[Code] -> TimeOfDay[0],
  795.                                             TAG_DONE);
  796.  
  797.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT2],PanelWindow,NULL,
  798.                                                 GTSL_Level,Phonebook[Code] -> PayPerUnit[1],
  799.                                             TAG_DONE);
  800.  
  801.                                             GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT2],PanelWindow,NULL,
  802.                                                 GTSL_Level,Phonebook[Code] -> SecPerUnit[1],
  803.                                             TAG_DONE);
  804.  
  805.                                             GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME2],PanelWindow,NULL,
  806.                                                 GTSL_Level,Phonebook[Code] -> TimeOfDay[1],
  807.                                             TAG_DONE);
  808.  
  809.                                             Selected = Code;
  810.  
  811.                                             break;
  812.  
  813.                                     case GAD_DIAL:  if(SubWindow && Selected != ~0)
  814.                                             {
  815.                                                 CloseSubWindow();
  816.                                                 FreeSubList();
  817.                                             }
  818.  
  819.                                             if(Selected != ~0)
  820.                                             {
  821.                                                 if(SubList = (struct List *)AllocMem(sizeof(struct List),MEMF_PUBLIC | MEMF_CLEAR))
  822.                                                 {
  823.                                                     struct PhoneNode *SubNode;
  824.  
  825.                                                     NewList(SubList);
  826.  
  827.                                                     if(SubNode = (struct PhoneNode *)AllocMem(sizeof(struct PhoneNode),MEMF_PUBLIC|MEMF_CLEAR))
  828.                                                     {
  829.                                                         SubNode -> VanillaNode . ln_Name    = Phonebook[Selected] -> Name;
  830.                                                         SubNode -> Entry            = Phonebook[Selected];
  831.                                                         SubNode -> Number            = Selected;
  832.  
  833.                                                         SubListNum = 1;
  834.  
  835.                                                         AddTail(SubList,&SubNode -> VanillaNode);
  836.  
  837.                                                         Terminated = TRUE;
  838.                                                     }
  839.                                                     else
  840.                                                     {
  841.                                                         FreeMem(SubList,sizeof(struct List));
  842.                                                         SubList = NULL;
  843.                                                     }
  844.                                                 }
  845.                                             }
  846.  
  847.                                             break;
  848.  
  849.                                     case GAD_GET:    if(Selected != ~0)
  850.                                                 Phonebook[Selected] -> Config = Config;
  851.  
  852.                                             break;
  853.  
  854.                                     case GAD_NEW:    GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  855.                                                 GTLV_Labels,~0,
  856.                                             TAG_DONE);
  857.  
  858.                                             if(PhoneList)
  859.                                             {
  860.                                                 DeletePhoneList(PhoneList);
  861.  
  862.                                                 PhoneList = NULL;
  863.                                             }
  864.  
  865.                                             if(NewPhoneEntry())
  866.                                             {
  867.                                                 if(PhoneList = CreatePhoneList())
  868.                                                 {
  869.                                                     Selected = NumPhoneEntries - 1;
  870.  
  871.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  872.                                                         GTLV_Labels,PhoneList,
  873.                                                         GTLV_Selected,Selected,
  874.                                                     TAG_DONE);
  875.  
  876.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  877.                                                         GTST_String,Phonebook[Selected] -> Number,
  878.                                                     TAG_DONE);
  879.  
  880.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  881.                                                         GTST_String,Phonebook[Selected] -> Password,
  882.                                                     TAG_DONE);
  883.  
  884.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_MACROFILE],PanelWindow,NULL,
  885.                                                         GTST_String,Phonebook[Selected] -> Config . MacroFile,
  886.                                                     TAG_DONE);
  887.  
  888.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT1],PanelWindow,NULL,
  889.                                                         GTSL_Level,Phonebook[Selected] -> PayPerUnit[0],
  890.                                                     TAG_DONE);
  891.  
  892.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT1],PanelWindow,NULL,
  893.                                                         GTSL_Level,Phonebook[Selected] -> SecPerUnit[0],
  894.                                                     TAG_DONE);
  895.  
  896.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME1],PanelWindow,NULL,
  897.                                                         GTSL_Level,Phonebook[Selected] -> TimeOfDay[0],
  898.                                                     TAG_DONE);
  899.  
  900.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT2],PanelWindow,NULL,
  901.                                                         GTSL_Level,Phonebook[Selected] -> PayPerUnit[1],
  902.                                                     TAG_DONE);
  903.  
  904.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT2],PanelWindow,NULL,
  905.                                                         GTSL_Level,Phonebook[Selected] -> SecPerUnit[1],
  906.                                                     TAG_DONE);
  907.  
  908.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME2],PanelWindow,NULL,
  909.                                                         GTSL_Level,Phonebook[Selected] -> TimeOfDay[1],
  910.                                                     TAG_DONE);
  911.                                                 }
  912.                                                 else
  913.                                                     goto ClearList;
  914.                                             }
  915.                                             else
  916.                                                 goto ClearList;
  917.  
  918.                                             break;
  919.  
  920.                                     case GAD_REMOVE:if(!SubWindow)
  921.                                             {
  922.                                                 if(Selected != ~0)
  923.                                                 {
  924.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  925.                                                         GTLV_Labels,~0,
  926.                                                     TAG_DONE);
  927.  
  928.                                                     if(PhoneList)
  929.                                                     {
  930.                                                         DeletePhoneList(PhoneList);
  931.  
  932.                                                         PhoneList = NULL;
  933.                                                     }
  934.  
  935.                                                     RemPhoneEntry(Selected);
  936.  
  937.                                                     if(NumPhoneEntries > 0)
  938.                                                     {
  939.                                                         if(PhoneList = CreatePhoneList())
  940.                                                         {
  941.                                                             if(Selected == NumPhoneEntries)
  942.                                                                 Selected--;
  943.  
  944.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  945.                                                                 GTLV_Labels,PhoneList,
  946.                                                                 GTLV_Selected,Selected,
  947.                                                             TAG_DONE);
  948.  
  949.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  950.                                                                 GTST_String,Phonebook[Selected] -> Number,
  951.                                                             TAG_DONE);
  952.  
  953.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  954.                                                                 GTST_String,Phonebook[Selected] -> Password,
  955.                                                             TAG_DONE);
  956.  
  957.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_MACROFILE],PanelWindow,NULL,
  958.                                                                 GTST_String,Phonebook[Selected] -> Config . MacroFile,
  959.                                                             TAG_DONE);
  960.  
  961.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT1],PanelWindow,NULL,
  962.                                                                 GTSL_Level,Phonebook[Selected] -> PayPerUnit[0],
  963.                                                             TAG_DONE);
  964.  
  965.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT1],PanelWindow,NULL,
  966.                                                                 GTSL_Level,Phonebook[Selected] -> SecPerUnit[0],
  967.                                                             TAG_DONE);
  968.  
  969.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME1],PanelWindow,NULL,
  970.                                                                 GTSL_Level,Phonebook[Selected] -> TimeOfDay[0],
  971.                                                             TAG_DONE);
  972.  
  973.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT2],PanelWindow,NULL,
  974.                                                                 GTSL_Level,Phonebook[Selected] -> PayPerUnit[1],
  975.                                                             TAG_DONE);
  976.  
  977.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT2],PanelWindow,NULL,
  978.                                                                 GTSL_Level,Phonebook[Selected] -> SecPerUnit[1],
  979.                                                             TAG_DONE);
  980.  
  981.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME2],PanelWindow,NULL,
  982.                                                                 GTSL_Level,Phonebook[Selected] -> TimeOfDay[1],
  983.                                                             TAG_DONE);
  984.                                                         }
  985.                                                         else
  986.                                                             goto ClearList;
  987.                                                     }
  988.                                                     else
  989.                                                     {
  990. ClearList:                                                    GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  991.                                                             GTLV_Labels,&EmptyList,
  992.                                                         TAG_DONE);
  993.  
  994.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  995.                                                             GTST_String,NULL,
  996.                                                         TAG_DONE);
  997.  
  998.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  999.                                                             GTST_String,NULL,
  1000.                                                         TAG_DONE);
  1001.  
  1002.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_MACROFILE],PanelWindow,NULL,
  1003.                                                             GTST_String,NULL,
  1004.                                                         TAG_DONE);
  1005.  
  1006.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT1],PanelWindow,NULL,
  1007.                                                             GTIN_Number,NULL,
  1008.                                                         TAG_DONE);
  1009.  
  1010.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT1],PanelWindow,NULL,
  1011.                                                             GTIN_Number,NULL,
  1012.                                                         TAG_DONE);
  1013.  
  1014.                                                         Selected = ~0;
  1015.                                                     }
  1016.                                                 }
  1017.                                             }
  1018.  
  1019.                                             break;
  1020.  
  1021.                                     case GAD_NAME:    if(Selected != ~0)
  1022.                                             {
  1023.                                                 strcpy(Phonebook[Selected] -> Name,((struct StringInfo *)GadgetArray[GAD_NAME] -> SpecialInfo) -> Buffer);
  1024.  
  1025.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1026.                                                     GTLV_Labels,~0,
  1027.                                                 TAG_DONE);
  1028.  
  1029.                                                 if(PhoneList)
  1030.                                                     DeletePhoneList(PhoneList);
  1031.  
  1032.                                                 if(PhoneList = CreatePhoneList())
  1033.                                                 {
  1034.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1035.                                                         GTLV_Labels,PhoneList,
  1036.                                                         GTLV_Selected,Selected,
  1037.                                                     TAG_DONE);
  1038.                                                 }
  1039.                                             }
  1040.  
  1041.                                             break;
  1042.  
  1043.                                     case GAD_PHONENUMBER:
  1044.                                             if(Selected != ~0)
  1045.                                                 strcpy(Phonebook[Selected] -> Number,((struct StringInfo *)GadgetArray[GAD_PHONENUMBER] -> SpecialInfo) -> Buffer);
  1046.  
  1047.                                             break;
  1048.  
  1049.                                     case GAD_PASSWORD:
  1050.                                             if(Selected != ~0)
  1051.                                                 strcpy(Phonebook[Selected] -> Password,((struct StringInfo *)GadgetArray[GAD_PASSWORD] -> SpecialInfo) -> Buffer);
  1052.  
  1053.                                             break;
  1054.  
  1055.                                     case GAD_MACROFILE:
  1056.                                             if(Selected != ~0)
  1057.                                                 strcpy(Phonebook[Selected] -> Config . MacroFile,((struct StringInfo *)GadgetArray[GAD_MACROFILE] -> SpecialInfo) -> Buffer);
  1058.  
  1059.                                             break;
  1060.  
  1061.                                     case GAD_SERIAL:
  1062.                                             if(Selected != ~0)
  1063.                                             {
  1064.                                                 SetWait(PanelWindow);
  1065.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1066.  
  1067.                                                 SerialPanel(&Phonebook[Selected] -> Config);
  1068.  
  1069.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1070.  
  1071.                                                 ClearPointer(PanelWindow);
  1072.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1073.                                             }
  1074.  
  1075.                                             break;
  1076.  
  1077.                                     case GAD_MODEM:
  1078.                                             if(Selected != ~0)
  1079.                                             {
  1080.                                                 SetWait(PanelWindow);
  1081.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1082.  
  1083.                                                 ModemPanel(&Phonebook[Selected] -> Config);
  1084.  
  1085.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1086.  
  1087.                                                 ClearPointer(PanelWindow);
  1088.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1089.                                             }
  1090.  
  1091.                                             break;
  1092.  
  1093.                                     case GAD_SCREEN:
  1094.                                             if(Selected != ~0)
  1095.                                             {
  1096.                                                 SetWait(PanelWindow);
  1097.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1098.  
  1099.                                                 LoadRGB4(VPort,&Phonebook[Selected] -> Config . Colours[0],(1 << Screen -> RastPort . BitMap -> Depth));
  1100.  
  1101.                                                 ScreenPanel(&Phonebook[Selected] -> Config);
  1102.  
  1103.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1104.  
  1105.                                                 ClearPointer(PanelWindow);
  1106.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1107.  
  1108.                                                 LoadRGB4(VPort,&Config . Colours[0],(1 << Screen -> RastPort . BitMap -> Depth));
  1109.                                             }
  1110.  
  1111.                                             break;
  1112.  
  1113.                                     case GAD_TERMINAL:
  1114.                                             if(Selected != ~0)
  1115.                                             {
  1116.                                                 SetWait(PanelWindow);
  1117.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1118.  
  1119.                                                 TerminalPanel(&Phonebook[Selected] -> Config);
  1120.  
  1121.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1122.  
  1123.                                                 ClearPointer(PanelWindow);
  1124.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1125.                                             }
  1126.  
  1127.                                             break;
  1128.  
  1129.                                     case GAD_STARTUP:
  1130.                                             if(Selected != ~0)
  1131.                                             {
  1132.                                                 SetWait(PanelWindow);
  1133.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1134.  
  1135.                                                 xpr_gets("Enter Startup (Login) Macro",&Phonebook[Selected] -> Config . StartupMacro[0]);
  1136.  
  1137.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1138.  
  1139.                                                 ClearPointer(PanelWindow);
  1140.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1141.                                             }
  1142.  
  1143.                                             break;
  1144.  
  1145.                                     case GAD_PATH:
  1146.                                             if(Selected != ~0)
  1147.                                             {
  1148.                                                 SetWait(PanelWindow);
  1149.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1150.  
  1151.                                                 PathPanel(&Phonebook[Selected] -> Config);
  1152.  
  1153.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1154.  
  1155.                                                 ClearPointer(PanelWindow);
  1156.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1157.                                             }
  1158.  
  1159.                                             break;
  1160.  
  1161.                                     case GAD_TRANSFER:
  1162.                                             if(Selected != ~0)
  1163.                                             {
  1164.                                                 SetWait(PanelWindow);
  1165.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1166.  
  1167.                                                 strcpy(DummyBuffer,LastXprLibrary);
  1168.  
  1169.                                                 strcpy(LastXprLibrary,Phonebook[Selected] -> Config . Protocol);
  1170.  
  1171.                                                 xpr_options(0,NULL);
  1172.  
  1173.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1174.  
  1175.                                                 strcpy(Phonebook[Selected] -> Config . Protocol,LastXprLibrary);
  1176.  
  1177.                                                 strcpy(LastXprLibrary,DummyBuffer);
  1178.  
  1179.                                                 NewLibrary = FALSE;
  1180.  
  1181.                                                 ClearPointer(PanelWindow);
  1182.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1183.                                             }
  1184.  
  1185.                                             break;
  1186.  
  1187.                                     case GAD_LOAD:    strcpy(DummyBuffer,LastPhone);
  1188.  
  1189.                                             DummyChar = PathPart(DummyBuffer);
  1190.  
  1191.                                             *DummyChar = 0;
  1192.  
  1193.                                             SetWait(PanelWindow);
  1194.                                             PanelWindow -> Flags |= WFLG_RMBTRAP;
  1195.  
  1196.                                             if(FileRequest = GetFile("Load Phonebook...",DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.term",FALSE,FALSE))
  1197.                                             {
  1198.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1199.                                                     GTLV_Labels,~0,
  1200.                                                 TAG_DONE);
  1201.  
  1202.                                                 if(PhoneList)
  1203.                                                     DeletePhoneList(PhoneList);
  1204.  
  1205.                                                 PhoneList = NULL;
  1206.  
  1207.                                                 if(!LoadPhonebook(DummyBuffer))
  1208.                                                     MyEasyRequest(Window,"Couldn't load phonebook\n\"%s\"!","Continue",DummyBuffer);
  1209.  
  1210.                                                 if(PhoneList = CreatePhoneList())
  1211.                                                 {
  1212.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1213.                                                         GTLV_Labels,PhoneList,
  1214.                                                         GTLV_Selected,~0,
  1215.                                                     TAG_DONE);
  1216.  
  1217.                                                     CloseSubWindow();
  1218.                                                     FreeSubList();
  1219.                                                 }
  1220.  
  1221.                                                 Selected = ~0;
  1222.                                             }
  1223.  
  1224.                                             ClearPointer(PanelWindow);
  1225.                                             PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1226.  
  1227.                                             break;
  1228.  
  1229.                                     case GAD_SORT:    if(NumPhoneEntries > 1 && !SubWindow)
  1230.                                             {
  1231.                                                 SetWait(PanelWindow);
  1232.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1233.  
  1234.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1235.                                                     GTLV_Labels,~0,
  1236.                                                 TAG_DONE);
  1237.  
  1238.                                                 if(PhoneList)
  1239.                                                     DeletePhoneList(PhoneList);
  1240.  
  1241.                                                 SortPhoneEntries();
  1242.  
  1243.                                                 if(PhoneList = CreatePhoneList())
  1244.                                                 {
  1245.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1246.                                                         GTLV_Labels,PhoneList,
  1247.                                                         GTLV_Selected,~0,
  1248.                                                     TAG_DONE);
  1249.                                                 }
  1250.  
  1251.                                                 ClearPointer(PanelWindow);
  1252.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1253.                                             }
  1254.  
  1255.                                             break;
  1256.  
  1257.                                     case GAD_SAVE:    if(NumPhoneEntries)
  1258.                                             {
  1259.                                                 strcpy(DummyBuffer,LastPhone);
  1260.  
  1261.                                                 DummyChar = PathPart(DummyBuffer);
  1262.  
  1263.                                                 *DummyChar = 0;
  1264.  
  1265.                                                 SetWait(PanelWindow);
  1266.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1267.  
  1268.                                                 if(FileRequest = GetFile("Save Phonebook...",DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.term",TRUE,FALSE))
  1269.                                                 {
  1270.                                                     if(!SavePhonebook(DummyBuffer))
  1271.                                                         MyEasyRequest(Window,"Couldn't create phonebook\n\"%s\"!","Continue",DummyBuffer);
  1272.                                                 }
  1273.  
  1274.                                                 ClearPointer(PanelWindow);
  1275.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1276.                                             }
  1277.  
  1278.                                             break;
  1279.  
  1280.                                     default:    break;
  1281.                                 }
  1282.                             }
  1283.                         }
  1284.  
  1285.                         switch(HandleSubWindow(PanelWindow))
  1286.                         {
  1287.                             case 1:    Terminated = TRUE;
  1288.                                         break;
  1289.  
  1290.                             case 2:    CloseSubWindow();
  1291.                                         FreeSubList();
  1292.  
  1293.                                         break;
  1294.  
  1295.                             default:    break;
  1296.                         }
  1297.                     }
  1298.  
  1299.                     DeleteTone();
  1300.  
  1301.                     if(PhoneList)
  1302.                         DeletePhoneList(PhoneList);
  1303.  
  1304.                     CloseSubWindow();
  1305.  
  1306.                     PanelWindow -> Flags |= WFLG_RMBTRAP;
  1307.  
  1308.                     ClearMenuStrip(PanelWindow);
  1309.  
  1310.                     RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  1311.  
  1312.                     PopWindow();
  1313.  
  1314.                     OffsetX = PanelWindow -> LeftEdge;
  1315.                     OffsetY = PanelWindow -> TopEdge;
  1316.  
  1317.                     CloseWindow(PanelWindow);
  1318.                 }
  1319.  
  1320.                 FreeMenus(PanelMenu);
  1321.             }
  1322.         }
  1323.  
  1324.         FreeGadgets(GadgetList);
  1325.     }
  1326.  
  1327.     *NumCalls = SubListNum;
  1328.  
  1329.     return(SubList);
  1330. }
  1331.